package com.ssy.lingxi.purchase.entity.purchaseinquiry;

import com.ssy.lingxi.purchase.api.dto.request.EnclosureUrlsRequest;
import com.ssy.lingxi.purchase.api.dto.response.online.CountryArea;
import com.ssy.lingxi.purchase.entity.converter.JpaJsonToCountryAreaListConverter;
import com.ssy.lingxi.purchase.entity.converter.JpaJsonToEnclosureUrlsRequestListConverter;
import com.ssy.lingxi.purchase.entity.converter.JpaJsonToShopIdConverter;
import lombok.Data;

import javax.persistence.*;
import java.util.List;

/**
* 采购询价实体
* @author wrc
* @date 2021/1/19
*/
@Data
@Entity
@Table(schema = "public", name = "pu_purchase_inquiry",indexes = {@Index(name="pu_purchase_inquiry_member_id_member_role_id_idx",columnList = "memberId,memberRoleId"),
        @Index(name = "pu_purchase_inquiry_purchase_inquiry_no_idx",columnList = "purchaseInquiryNo"),
        @Index(name = "pu_purchase_inquiry_type_idx",columnList = "type"),
        @Index(name = "pu_purchase_inquiry_shop_type_idx",columnList = "shopType"),
        @Index(name = "pu_purchase_inquiry_external_state_idx",columnList = "externalState"),
        @Index(name = "pu_purchase_inquiry_interior_state_idx",columnList = "interiorState"),
        @Index(name = "pu_purchase_inquiry_details_idx",columnList = "details")})
public class PurchaseInquiry {

    @Id
    @GeneratedValue(strategy= GenerationType.SEQUENCE,generator="purchase_inquiry_seq")
    @SequenceGenerator(sequenceName="pu_purchase_inquiry_seq", name="purchase_inquiry_seq",allocationSize = 1)
    private Long id;

    /**
     *需求单号
     */
    private String purchaseInquiryNo;

    /**
     * 会员名字
     */
    private String memberName;

    /**
     * 会员ID
     */
    private Long memberId;

    /**
     * 会员角色ID
     */
    private Long memberRoleId;

    /**
     *需求摘要
     */
    private String details;

    /**
     *交付日期
     */
    private Long deliveryTime;

    /**
     *报价截止时间
     */
    private Long offerEndTime;

    /**
     *外部状态:-1.作废  99.已完成 1.待提交需求单 2.待审核需求单(22.1.20版本作废第二步) 3.待提交报价单 4.待确认授标结果 5.审核不通过需求单 6.发下轮报价
     */
    private Integer externalState;

    /**
     *内部状态:0.已完成 1.待提交审核 2.待审核(一级) 3.待审核(二级) 4.待提交报价单 5.待比价 6.审核通过(一级)  7.审核通过(二级) 8.审核不通过(一级) 9.审核通过(二级)
     */
    private Integer interiorState;

    /**
     * 下一步骤，如果为0表示流程已经结束，没有下一步
     */
    private Integer interiorNextStep;

    /**
     *确认报价内部状态:0.已完成 1.待提交审核 2.待审核(一级) 3.待审核(二级) 4.待提交报价单 5.待比价 6.审核通过(一级)  7.审核通过(二级) 8.审核不通过(一级) 9.审核通过(二级)
     */
    private Integer confirmInteriorState;

    /**
     * 确认报价 下一步骤，如果为0表示流程已经结束，没有下一步
     */
    private Integer confirmInteriorNextStep;

    /**
     * 确认报价 内部工作流流程taskId
     */
    private String confirmInteriorTaskId;
    /**
     * 外部工作流流程taskId
     */
    private String externalTaskId;

    /**
     * 下一步骤，如果为0表示流程已经结束，没有下一步
     */
    private Integer externalNextStep;

    /**
     * 内部工作流流程taskId
     */
    private String interiorTaskId;

    /**
     *交付地址
     */
    private String address;

    /**
     *交付地址Id
     */
    private Long addressId;

    /**
     *报价要求
     */
    private String offer;

    /**
     *付款方式
     */
    private String paymentType;

    /**
    * 税费要求
    */
    private String taxes;

    /**
     *物流要求
     */
    private String logistics;

    /**
     *包装要求
     */
    private String packRequire;

    /**
     *需求单状态
     */
    private Integer state;

    /**
     *其他要求
     */
    private String otherRequire;

    /**
     *需求对接类型：1.发布至平台门户 2.系统匹配 3.指定供应会员
     */
    private Integer type;

    /**
     *创建时间
     */
    private Long createTime;

    /**
     *更新时间
     */
    private Long updateTime;

    /**
     * 创建人ID
     */
    private Long createMemberRoleId;

    /**
     * 创建会员名字
     */
    private String createMemberName;

    /**
     * 创建会员ID
     */
    private Long createMemberId;

    /**
     * 会员信用积分
     */
    private Integer integral = 0;

    /**
     *采购类型:1.单词采购 2.协议采购
     */
    private Integer purchaseType;

    /**
     *比价方式:1.密封比价 2.非密封比价
     */
    private Integer priceContrast;

    /**
     *添加采购物料方式：1.选择货品生成 2.导入货品生成 3.通过平台属性生成
     */
    private  Integer materielMode;

    /**
     *是否使用使用地市：1-是，0-否
     */
    private Integer isAreas;

    /**
     * 适用地市
     */
    @Convert(converter = JpaJsonToCountryAreaListConverter.class)
    @Column(columnDefinition = "jsonb")
    private List<CountryArea> areas;

    /**
     * 发布需求 绑定的商城Id
     */
    @Convert(converter = JpaJsonToShopIdConverter.class)
    @Column(columnDefinition = "jsonb")
    private List<Long> shopIds;

    /**
     *有效报价次数
     */
    private Integer count;

    /**
     *报价轮次
     */
    private Integer turn;

    /**
     *授标意见
     */
    private String awardComments;

    /**
     * 附件(比价时上传)
     */
    @Convert(converter = JpaJsonToEnclosureUrlsRequestListConverter.class)
    @Column(columnDefinition = "jsonb")
    private List<EnclosureUrlsRequest> urls;

    /**
     * 交易条件附件(添加采购询价单)
     */
    @Convert(converter = JpaJsonToEnclosureUrlsRequestListConverter.class)
    @Column(columnDefinition = "jsonb")
    private List<EnclosureUrlsRequest> transactionUurls;

    /**
     *作废时间
     */
    private Long nullifyTime;

    /**
     *是否发送中标通知 1.是 0.否
     */
    private Integer prizeNotice;

    /**
     *是否发送发送感谢函 1.是 0.否
     */
    private Integer thank;

    /**
     *是否发布中标公告 1.是 0.否
     */
    private Integer notice;

    /**
     *中标公告内容
     */
    private String awardResults;

    /**
     *感谢函内容
     */
    private String content;

    /**
     * 发布商城类型  参考ShopTypeEnum
     * 220418需求新增 1.企业商城与 6采购门户
     */
    @Column(columnDefinition = "int default 6",nullable = false)
    private Integer shopType;
}
